package cn.gok;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 测试SpringMVC获取前端提交数据
 */
@Controller
public class TestControllerGetData {

    /**
        SpringMVC获取数据方式1：
                    HttpServletRequest
     */
    @RequestMapping("/testGetData1")
    public String getData1(HttpServletRequest request, HttpSession session){
        String userName = request.getParameter("userName");
        System.out.println("userName: " + userName);

        return "success";
    }

    /**
     SpringMVC获取数据方式2 :
            利用SpringMVC的自动封装机制，将数据自动赋值给参数列表中的变量

                注意：方法中的参数名要和 前端提交对的参数名保持一致，
                    否则不能赋值成功
     */
    @RequestMapping("/testGetData2")
    public String getData2(String userNamex,String gender,Integer age){
        System.out.println("userNamex: " + userNamex);
        System.out.println("gender: " + gender);
        System.out.println("age: " + age);

        return "success";
    }


    /**
     @RequestParam 注解
            取值过程中，方法中的参数和前端不一样时，
            可以通过@RequestParam注解指定 和前端参数的映射关系

        属性：
            value： 指定和前端参数的映射关系，如果只有该属性时，可以不写属性名
            defaultValue： 为当前参数设置一个默认值，如果前端未为该参数传值，则使用默认值，否则使用前端提交的值
     */
    @RequestMapping("/testGetData4")
    public String getData4(@RequestParam("userName") String userNamex,
                           @RequestParam(value = "age",defaultValue = "19") int age){
        System.out.println("userNamex : " + userNamex);
        System.out.println("age: " + age);
        return "success";
    }




    /**
     SpringMVC获取数据方式3 :
         利用SpringMVC的自动封装机制，将前端数据封装到一个对象中，
         注意： 此时属性名 要和前端提交参数名保持一致，都在赋值失败
     */
    @RequestMapping("/testGetData3")
    public String getData3(User user){
        System.out.println(user);
        return "success";
    }
}
